import { TraceFormatter, defaultFormatter } from "./defaultFormatter";

export class TraceStackFrame {
    private line: number;
    private callerName: string;

    constructor(line: number, callerName: string) {
        this.line = line;
        this.callerName = callerName;
    }

    /**
     * @description: 获取调用所在代码中的行数。
     * @return {number} 调用所在的行号。
     */
    public getLine(): number {
        return this.line;
    }

    /**
     * @description: 获取调用者的函数名。
     * @return {string} 调用者的函数名。
     */
    public getCallerName(): string {
        return this.callerName;
    }

    /**
     * @description: 设置调用者的函数名。
     * @param {string} callerName 要设置的函数名。
     */
    public setCallerName(callerName: string): void {
        this.callerName = callerName;
    }

    /**
     * @description: 将 TraceStackFrame 对象转换为字符串的方法。
     * @param {TraceFormatter} [format] 用于规定转换后的字符串格式的回调方法，默认转换格式的默认转换格式类似 Python 。
     * @return {string} 转换后的字符串。
     */
    public toString(format?: TraceFormatter): string {
        return (format ?? defaultFormatter)(this.line, this.callerName);
    }
}
